/******************************************************************************
                         COPYRIGHT 1955-2008 by BUPT ISC.
                        北京邮电大学信息安全中心 版权所有
                           Web: http://www.bupt.edu.cn
 *******************************************************************************/
/*******************************************************************************
  文件名： queue.h
  项目：   
  模块：   common
  作者：   zhuxiaobo
  版本：   0.2
  创建于:  2008-12-9 
  描述：
    链表数据结构声明和基本操作方法声明
 *********************************************************************************/
#ifndef LISTHEAD
#define LISTHEAD

typedef struct _list_node
{
        int iDataLen;               /*节点数据长度*/
        void *pData;                  /*节点数据*/
        struct _list_node *pstPrior;   /*前驱指针*/
        struct _list_node *pstNext;   /*后驱指针*/

}LIST_NODE;

typedef struct _link_list
{
        int iCount;                 /*线性链表中的元素个数*/
        LIST_NODE *pstHead;           /*指向链表头节点*/
        LIST_NODE *pstTail;            /*指向链表尾节点*/
}LINK_LIST;

#if !defined(bool)
#define bool int
#endif

#if !defined(true)
#define true 1
#endif

#if !defined(false)
#define false 0
#endif

/*新节点的建立*/
LIST_NODE *createNode( void *,int );

/*节点空间的释放，包括了节点数据域和节点本身空间的释放*/
bool freeNode(LIST_NODE *);

/*初始化线性链表*/
bool initList(LINK_LIST *);

/*头节点的创建*/
bool createListHead(LINK_LIST *, LIST_NODE *);

/*节点的尾插法*/
bool addListTail(LINK_LIST *, LIST_NODE *);

/*在当前节点之后插入节点*/
bool insertListAfter(LINK_LIST *, LIST_NODE *, LIST_NODE*);

/*删除当前节点*/
bool delListNode(LINK_LIST *, LIST_NODE *);

/*将线性表置为空表，并释放原链表的节点空间*/
bool  freeList(LINK_LIST *);
#endif
